local M = {}

function M.should_use_provider(_)
  local not_coc_installed = vim.fn.exists '*CocActionAsync' == 0
  local not_coc_service_initialized = vim.g.coc_service_initialized == 0

  if not_coc_installed or not_coc_service_initialized then
    return
  end

  local coc_attached = vim.fn.call('CocAction', { 'ensureDocument' })
  local has_symbols = vim.fn.call('CocHasProvider', { 'documentSymbol' })

  return coc_attached and has_symbols
end

function M.hover_info(_, _, on_info)
  on_info(nil, { contents = { kind = 'markdown', contents = { 'No extra information availaible!' } } })
end

---@param on_symbols function
function M.request_symbols(on_symbols)
  vim.fn.call('CocActionAsync', {
    'documentSymbols',
    function(_, symbols)
      on_symbols { [1000000] = { result = symbols } }
    end,
  })
end

return M
